home *** CD-ROM | disk | FTP | other *** search
- ////////////////////////////////////////////////////////////////
- // File - PCI_DUMP.C
- //
- // A utility for getting a dump of all the PCI configuration
- // registers of the PCI cards installed.
- //
- ////////////////////////////////////////////////////////////////
-
- #include "../../include/windrvr.h"
- #include "../shared/pci_diag_lib.h"
- #include <stdio.h>
-
- int main (int argc, char *argv[])
- {
- HANDLE hWD;
- char buf[256];
- WORD wVendorID;
- WORD wDeviceID;
- WD_PCI_CONFIG_DUMP pciCnf;
- int g;
-
- if (!PCI_Get_WD_handle(&hWD)) return 0;
-
- BZERO(pciCnf);
- pciCnf.fIsRead = TRUE;
- printf ("pci bus scan (using WD_PciConfigDump)\n");
-
- for (pciCnf.pciSlot.dwBus=0; pciCnf.pciSlot.dwBus<256;
- pciCnf.pciSlot.dwBus++)
- {
- for (pciCnf.pciSlot.dwSlot=0; pciCnf.pciSlot.dwSlot<32;
- pciCnf.pciSlot.dwSlot++)
- {
- for (pciCnf.pciSlot.dwFunction=0; pciCnf.pciSlot.dwFunction<8;
- pciCnf.pciSlot.dwFunction++)
- {
- CHAR tmp[200];
- wVendorID = 0xffff;
- pciCnf.pBuffer = &wVendorID;
- pciCnf.dwBytes = sizeof(wVendorID);
- pciCnf.dwOffset = 0;
- WD_PciConfigDump(hWD,&pciCnf);
- if (wVendorID==0xffff)
- {
- if (pciCnf.pciSlot.dwFunction==0)
- break; // skip slot
- else
- continue; // skip function
- }
- pciCnf.pBuffer = &wDeviceID;
- pciCnf.dwBytes = sizeof(wDeviceID);
- pciCnf.dwOffset = 2;
- WD_PciConfigDump(hWD,&pciCnf);
- pciCnf.pBuffer = buf;
- pciCnf.dwBytes = sizeof(buf);
- pciCnf.dwOffset = 0;
- WD_PciConfigDump(hWD,&pciCnf);
-
- printf("Bus %d Slot %d Function %d, VendorID %04x DeviceID %04x\n",
- pciCnf.pciSlot.dwBus, pciCnf.pciSlot.dwSlot, pciCnf.pciSlot.dwFunction, wVendorID, wDeviceID);
- for (g=0; g<256; g+=4)
- {
- if ((g/4) % 8 == 0) printf("%2x ",g);
- printf ("%08x ",*((DWORD *) (buf+g)));
- if ((g/4) % 8 == 7) printf("\n");
- }
-
- PCI_Print_card_info(pciCnf.pciSlot);
- printf("Press Enter to continue to next slot\n");
- fgets(tmp, sizeof(tmp), stdin);
- }
- }
- }
-
- WD_Close(hWD);
-
- return 0;
- }
-
-